enumerate¶prophets = ['Moses', 'Elijah', 'Nephi', 'Malachi', 'Alma']
for index, prophet in enumerate(prophets):
    print(f'{index}: {prophet}')
lights.py simulates a smart-home light-management system.
This program allows the user to view the status ("ON" or "OFF") of the lights in the home, as well as toggle the status of each light (ON->OFF or OFF->ON).
(0) Show statuses
(1) Toggle light
(2) Quit
Option: 0
Front Porch: OFF
Entry: OFF
Kitchen: OFF
Bedroom: OFF
(0) Show statuses
(1) Toggle light
(2) Quit
Option: 1
Which light do you want to toggle?
(0) Front Porch
(1) Entry
(2) Kitchen
(3) Bedroom
Option: 1
Entry is now ON
(0) Show statuses
(1) Toggle light
(2) Quit
Option: 0
Front Porch: OFF
Entry: ON
Kitchen: OFF
Bedroom: OFF
(0) Show statuses
(1) Toggle light
(2) Quit
Option: 2lights.py¶NOTES
NOTES
def main_menu():
    menu = [
        'Quit',
        'Show status',
        'Toggle light'
    ]
    valid_options = []
    print()
    for index, option in enumerate(menu):
        print(f'({index}) {option}')
        valid_options.append(str(index))
    while True:
        response = input('Option: ').strip()
        if response not in valid_options:
            print(f'Invalid option: {response}')
        else:
            return int(response)
def run_lights():
    while True:
        option = main_menu()
        if option == 0:  # Show status
            print()
            print("Show status")
        elif option == 1:  # Toggle light
            print()
            print('Toggle light')
        else:  # quit
            return
NOTES
json library to load lights.jsonif __name__ == '__main__': blocksys.argv[1]def load_lights(lights_file):
    with open(lights_file) as file:
        return json.load(file)
def run_lights(lights_file):
    lights = load_lights(lights_file)
    ...
if __name__ == '__main__':
    run_lights(sys.argv[1])
NOTES
show_status(lights) in run_lightsrun_lights?def show_status(lights):
    print()
    for name, status in lights.items():
        if status:
            status = "On"
        else:
            status = "Off"
        print(f'{name}: {status}')
NOTES
toggle_light(lights) in run_lightsmain_menu into prompt_menu(menu) and main_menuprompt_menu in toggle_lightget_status(bool_status) to return "ON" or "OFF"show_status and in toggle_lightlights.keys()lights[key] = not lights[key] (the "boolean toggle")def prompt_menu(menu, message):
    valid_options = []
    print()
    print(message)
    for index, option in enumerate(menu):
        print(f'({index}) {option}')
        valid_options.append(str(index))
    while True:
        response = input('Option: ').strip()
        if response not in valid_options:
            print(f'Invalid option: {response}')
        else:
            return int(response)
def get_status(bool_status):
    if bool_status:
        return "ON"
    else:
        return "OFF"
def toggle_light(lights):
    menu = list(lights.keys())
    option = prompt_menu(menu, "Which light do you want to toggle?")
    key = menu[option]
    lights[key] = not lights[key]
    print(f'{key} is now {get_status(lights[key])}')
NOTES
save_lights(lights, lights_file)save_lights right after toggle_lightdef save_lights(lights, lights_file):
    with open(lights_file, 'w') as file:
        json.dump(lights, file)
def run_lights(lights_file):
        ...
        elif option == 1:  # Toggle light
            toggle_light(lights)
            save_lights(lights, lights_file)
        ...
if-elif-else block to choose action based on option